package com.example.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 一般Web服务相关配置
 */
@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    /**
     * 创建并配置密码编码器
     *
     * 使用BCrypt算法进行密码编码，用于安全地存储和验证密码
     * 选择BCryptPasswordEncoder是因为它提供了一种强大的、不可逆的方式来加密密码，
     * 并且它还内置了盐值生成，可以防止彩虹表攻击
     *
     * @return PasswordEncoder接口的实现，用于对密码进行编码
     */
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    /**
     * 创建并配置RestTemplate实例
     *
     * RestTemplate用于客户端访问RESTful服务，这里配置一个实例以便在应用中使用
     * 直接在配置类中定义并初始化RestTemplate实例，可以方便地在任何需要的地方进行注入和使用
     *
     * @return RestTemplate实例，用于发送HTTP请求和接收HTTP响应
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    /**
     * 创建并配置MyBatis-Plus插件中的分页拦截器
     *
     * @return PaginationInnerInterceptor 分页拦截器实例
     */
@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
}

}

